package biblio.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import test.I_EmpruntEnCoursDAO;
import enumeration.EnumStatusExemplaire;
import Classe_table.EmpruntEnCours;
import Classe_table.Exemplaire;
import Classe_table.Utilisateur;
import Exception.BiblioException;

public class EmpruntEnCoursDAO implements I_EmpruntEnCoursDAO {
	private Connection cnx;
	

	public EmpruntEnCoursDAO(Connection cnx) {
		super();
		this.cnx = cnx;
	}
	
	/*public boolean insertEmpruntEnCours(int IDEXEMPLAIRE, int IDUTILISATEUR) throws SQLException
	{
		
		String cmd_SQL="INSERT INTO EMPRUNTENCOURS(IDEXEMPLAIRE,IDUTILISATEUR,DATEEMPRUNT) "
				+ "VALUES ("+IDEXEMPLAIRE+","+IDUTILISATEUR+",?)";
		PreparedStatement pstmt = cnx.prepareStatement(cmd_SQL);
		java.sql.Date sqldate=new java.sql.Date(new java.util.Date().getTime());
		pstmt.setDate(1, sqldate);
		return pstmt.execute();
	}*/
	
	/* (non-Javadoc)
	 * @see biblio.dao.I_EmpruntEnCours#insertEmpruntEnCours(Classe_table.EmpruntEnCours)
	 */
	@Override
	public boolean insertEmpruntEnCours(EmpruntEnCours emp)throws SQLException
	{
		String cmd_SQL="INSERT INTO EMPRUNTENCOURS(IDEXEMPLAIRE,IDUTILISATEUR,DATEEMPRUNT) "
				+ "VALUES ("+emp.getExemplaire().getIdExemplaire()+","+emp.getEmprunteur().getIdUtilisateur()+",?)";
		PreparedStatement pstmt = cnx.prepareStatement(cmd_SQL);
		java.sql.Date sqldate=new java.sql.Date(new java.util.Date().getTime());
		pstmt.setDate(1, sqldate);
		new ExemplairesDAO(cnx).updateexemplaire(emp.getExemplaire());
		return pstmt.execute();				
	}
	
	/*public void updateEmpruntEnCours(int IDEXEMPLAIRE, int IDUTILISATEUR) throws SQLException
	{
		String cmd_SQL="UPDATE EMPRUNTENCOURS SET IDUTILISATEUR=? WHERE IDEXEMPLAIRE="+IDEXEMPLAIRE;
		PreparedStatement pstmt=cnx.prepareStatement(cmd_SQL);
		pstmt.setInt(1, IDUTILISATEUR);
		pstmt.execute();
		pstmt.close();
	}*/
	
	/*public void updateEmpruntEnCours(Exemplaire e,Utilisateur u, Date d) throws SQLException
	{
		String cmd_SQL="UPDATE EMPRUNTENCOURS SET IDUTILISATEUR=?, DATEEMPRUNT=? WHERE IDEXEMPLAIRE="+e.getIdExemplaire();
		PreparedStatement pstmt=cnx.prepareStatement(cmd_SQL);
		pstmt.setInt(1, u.getIdUtilisateur());
		pstmt.setDate(2,new java.sql.Date(d.getTime()));
		pstmt.execute();
		pstmt.close();
	}*/
	
	/* (non-Javadoc)
	 * @see biblio.dao.I_EmpruntEnCours#updateEmpruntEnCours(Classe_table.EmpruntEnCours)
	 */
	@Override
	public void updateEmpruntEnCours(EmpruntEnCours emp)throws SQLException
	{
		String cmd_SQL="UPDATE EMPRUNTENCOURS SET IDUTILISATEUR=? WHERE IDEXEMPLAIRE="+emp.getExemplaire().getIdExemplaire();
		PreparedStatement pstmt=cnx.prepareStatement(cmd_SQL);
		pstmt.setInt(1, emp.getEmprunteur().getIdUtilisateur());
		pstmt.execute();
		pstmt.close();
		
	}
	
	/* (non-Javadoc)
	 * @see biblio.dao.I_EmpruntEnCours#updateEmpruntEnCours(Classe_table.EmpruntEnCours, java.util.Date)
	 */
	@Override
	public void updateEmpruntEnCours(EmpruntEnCours emp,Date d) throws SQLException
	{
		String cmd_SQL="UPDATE EMPRUNTENCOURS SET IDUTILISATEUR=?, DATEEMPRUNT=? WHERE IDEXEMPLAIRE="+emp.getExemplaire().getIdExemplaire();
		PreparedStatement pstmt=cnx.prepareStatement(cmd_SQL);
		pstmt.setInt(1, emp.getEmprunteur().getIdUtilisateur());
		pstmt.setDate(2,new java.sql.Date(d.getTime()));
		pstmt.execute();
		pstmt.close();
	}

		
	/* (non-Javadoc)
	 * @see biblio.dao.I_EmpruntEnCours#deleteEmpruntEnCours(Classe_table.Exemplaire)
	 */
	@Override
	public void deleteEmpruntEnCours (Exemplaire e) throws SQLException
	{
		String cmd_SQL="DELETE FROM EMPRUNTENCOURS WHERE IDEXEMPLAIRE="+e.getIdExemplaire();
		cnx.prepareStatement(cmd_SQL).execute();
	}

	
	public EmpruntEnCours findbykey(int id_exemplaire) throws SQLException, BiblioException
	{
		String cmd_sql="SELECT * FROM EMPRUNTENCOURS WHERE IDEXEMPLAIRE="+id_exemplaire;
		ResultSet rs= cnx.prepareStatement(cmd_sql).executeQuery();
		rs.next();
		Utilisateur user = new UtilisateursDao(cnx).findBykey(rs.getInt("IDUTILISATEUR"));
		cmd_sql="SELECT * FROM EXEMPLAIRE WHERE IDEXEMPLAIRE="+rs.getInt("IDEXEMPLAIRE");
		ResultSet rs2=cnx.prepareStatement(cmd_sql).executeQuery();
		rs2.next();
		EnumStatusExemplaire status;
		if(rs2.getString("STATUS").equals("PRETE"))
			status=EnumStatusExemplaire.PRETE;
			else if (rs2.getString("STATUS").equals("DISPONIBLE"))
				status=EnumStatusExemplaire.DISPONIBLE;	
			else
				status=EnumStatusExemplaire.SUPPRIME;
		Exemplaire exem = new Exemplaire(rs2.getInt("IDEXEMPLAIRE"), rs2.getDate("DATEACHAT"), status, rs2.getString("ISBN"));
		EmpruntEnCours EMP_en_cours= new EmpruntEnCours(user, exem,rs.getDate("DATEEMPRUNT"));
		
		return EMP_en_cours;	
	}


	public ArrayList<EmpruntEnCours> findbyUser(Utilisateur user) throws SQLException, BiblioException
	{
		ArrayList<EmpruntEnCours> retour= new ArrayList<EmpruntEnCours>();
		String cmd_sql="SELECT * FROM EMPRUNTENCOURS WHERE IDUTILISATEUR="+user.getIdUtilisateur();
		ResultSet rs= cnx.prepareStatement(cmd_sql).executeQuery();
		while(rs.next())
		{
			cmd_sql="SELECT * FROM EXEMPLAIRE WHERE IDEXEMPLAIRE="+rs.getInt("IDEXEMPLAIRE");
			ResultSet rs2=cnx.prepareStatement(cmd_sql).executeQuery();
			rs2.next();
			EnumStatusExemplaire status;
			if(rs2.getString("STATUS").equals("PRETE"))
				status=EnumStatusExemplaire.PRETE;
				else if (rs2.getString("STATUS").equals("DISPONIBLE"))
					status=EnumStatusExemplaire.DISPONIBLE;	
				else
					status=EnumStatusExemplaire.SUPPRIME;
			Exemplaire exem = new Exemplaire(rs2.getInt("IDEXEMPLAIRE"), rs2.getDate("DATEACHAT"), status, rs2.getString("ISBN"));
			retour.add( new EmpruntEnCours(user, exem,rs.getDate("DATEEMPRUNT")));
		}		
	return retour;	
	}
		


	public EmpruntEnCours findbykey_easyload(int id_exemplaire) throws SQLException, BiblioException
	{
		String cmd_sql="SELECT * FROM EMPRUNTENCOURS WHERE IDEXEMPLAIRE="+id_exemplaire;
		ResultSet rs= cnx.prepareStatement(cmd_sql).executeQuery();
		rs.next();	
		return new EmpruntEnCoursDb(rs.getInt("IDUTILISATEUR"), rs.getInt("IDEXEMPLAIRE"));
	}

	@Override
	public EmpruntEnCours findbykey_object(int id_exemplaire)
			throws SQLException, BiblioException {
		// TODO Auto-generated method stub
		return null;
	}
	
	/*public List<EmpruntEnCours> findbyUser(Utilisateur user) throws SQLException, BiblioException
	{
		List<EmpruntEnCours> retour= new ArrayList<EmpruntEnCours>();
		String cmd_sql="SELECT * FROM EMPRUNTENCOURS WHERE IDUTILISATEUR="+user.getIdUtilisateur();
		ResultSet rs= cnx.prepareStatement(cmd_sql).executeQuery();
		while(rs.next())
		{
		retour.add(new EmpruntEnCoursDb(rs.getInt("IDUTILISATEUR"), rs.getInt("IDEXEMPLAIRE")));	
		}
		return retour;
	}*/
		
}
